package com.hll.spring.mybatis.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hll.spring.mybatis.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author hll
 * @create 2022-05-11 15:12
 */
@Mapper
public interface UserMapper extends BaseMapper<User> {
  List<User> getUsers();

  /*如果查出来的结果有多行，而你放回类型只一个对象，就默认第一行*/
  /*如果不指明 @Param 那么mapper.xml 中只能用 #{uid} */
  User getUserByID(@Param("id") Integer uid);

  /** 查询用户信息的总记录数 */
  Integer getCount();

  // {2={name=郭富城, id=2,...}}
  @MapKey("id") // 本来是List<User>,也可以换成map,需要指定用哪个字段作为key
  Map<String, User> getUserByIdToMap(@Param("id") Integer id);

  /*可以用类对象作为参数，参数即属性名*/
  int insertUser(User user); // 参数也可以是 Map<String,Object>

  List<User> queryAllByLimit(Integer offset, Integer limit);

  /** 根据用户名模糊查询用户信息 */
  List<User> getUserByLike(@Param("username") String username);

  /** 批量删除,方法一 ids="1,2,3" */
  List<User> getByBatchIds(@Param("ids") String ids);

  /** 通过数组实现批量删除 */
  int getByBatchIds2(Integer[] ids);

  /** 多条件查询 实现1 */
  List<User> getUserByConditionOne(User user);

  /** 测试choose、when、otherwise */
  List<User> getUserByChoose(User user);

  /** 通过list集合实现批量添加,返回影响函数 */
  int insertMoreByList(List<User> users);

  /*给什么 更新什么*/
  int updateUser(User user);

  int deleteUserById(Integer id);

  // 多对1 处理1
  User getUserWithSchool(Integer id);
  // 处理2
  List<User> getUsersWithSchool();
}
